130 VTAB 3: HTAB 10: PRINT "M I C R O - S P A R C": VTAB 4: HTAB 14: PRINT "P.O. BOX 325": VTAB 5: HTAB 11: PRINT "LINCOLN, MA 01773"
140 VTAB 9: HTAB 13: PRINT "P R E S E N T S": VTAB 12: HTAB 8: FLASH : PRINT " ** D A T A B A S E **": NORMAL : VTAB 15: HTAB 10: PRINT "AUTOMATED INTELLIGENT": HTAB 11: PRINT "INFORMATION SYSTEM": VTAB 20: HTAB 7: PRINT "COPYRIGHT 1980, C.D.S.,INC"
150 VTAB 22: INVERSE : HTAB 10: PRINT "PRESS RETURN FOR MENU": NORMAL
3020 TEXT : HOME : GOSUB 260: HOME : GOSUB 360:RX = 0: GOSUB 280
3030 INPUT REC
3040 PRINT D$;"CLOSE";FILE$
3050 HOME : VTAB 6: PRINT "ENTER IN PRINTER INFORMATION.": PRINT : PRINT "DO YOU HAVE A PRINTER (Y/N) ";G$;: GET Y$: PRINT Y$: IF Y$ = "N" THEN SLOT = 0: GOTO 3140
3060 IF Y$ < >"Y" THEN 3050
3070 VTAB 10: CALL -868: PRINT "ENTER IN SLOT # ";G$;: GET SL$: PRINT SL$:SLOT = VAL(SL$)
3080 IF Y$ = CHR$(27) OR Y$ = CHR$(32) THEN CLEAR : GOTO 500
3090 IF SLOT <1 OR SLOT >7 THEN PRINT G$;G$: GOTO 3070
4370 VTAB 23: CALL -868: HTAB 10: PRINT "ENTRY TOO LONG!";G$;G$: FOR KK = 1 TO 500: NEXT KK: VTAB 23: HTAB 10: GOSUB 250: PRINT : GOTO 4350
4380 GOSUB 310: GOTO 4330
4390 RX = RD: GOSUB 220: FOR K = 1 TO NF: PRINT P$(K): NEXT K
4400 PRINT D$;"CLOSE";FILE$
4410 GOTO 4050
5000 REM **FIND MODULE**
5010 A1$ = "FIND INFORMATION":B1$ = "SEARCH"
5020 TEXT : HOME : GOSUB 260: HOME : GOSUB 360:RX = 0: GOSUB 280
5030 INPUT REC
5040 PRINT D$;"CLOSE ";FILE$
5050 DIM SP$(NF),SERFLD(NF):N = 0
5055 NQ = 0
5060 HOME : PRINT : PRINT "THE FOLLOWING LINES ARE AVAILABLE FOR THE ";B1$;":": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
5070 FOR K = 1 TO NF: VTAB 20: HTAB 1: CALL -958: VTAB 24: HTAB 10: GOSUB 250
5075 NQ = NQ +1
5080 VTAB 20: HTAB 1: CALL -868: PRINT "ENTER CHOICE FOR SEARCH FIELD # ";K;G$;: INPUT ": ";SERFLD$: IF SERFLD$ = "" AND K = 1 THEN CLEAR : GOTO 500
5090 IF SERFLD$ = "" THEN NQ = NQ:K = NF: GOTO 5130
5100 SERFLD(K) = VAL(SERFLD$): IF SERFLD(K) <1 OR SERFLD(K) >NF THEN 5080
5120 IF SP >TV(SERFLD(K)) THEN VTAB 22: HTAB 1: CALL -868: INVERSE : PRINT "SEARCH PARAMETER TOO LONG !";: NORMAL : FOR II = 1 TO 750: NEXT II: GOTO 5110
5130 NEXT K: FOR II = 1 TO 300: NEXT II
5140 HOME : FOR K = 1 TO NQ: VTAB (2 *K +6): HTAB 1: PRINT "SEARCH ";T$(SERFLD(K));" FOR ";SP$(K);: IF K <NQ THEN HTAB ( PEEK(36) +2): PRINT "AND";
5150 NEXT K: PRINT
5160 GOSUB 190: IF Y$ = "N" THEN 5060
5170 IF Y$ < >"Y" THEN 5160
5180 PRINT D$;"OPEN ";FILE$;",L";RL
5190 FOR K1 = 1 TO REC
5200 SRFL = 0
5210 PRINT D$;"READ ";FILE$;",R";K1
5220 FOR K = 1 TO NF: INPUT P$(K): NEXT K
5230 FOR K = 1 TO NQ
5240 & P$(SERFLD(K)),SP$(K)
5250 IF PEEK(26) = 0 THEN K = NQ:SRFL = 1
5260 NEXT K: IF SRFL = 1 THEN 5410
5270 PRINT D$;"CLOSE ";FILE$
5280 N = N +1: HOME : GOSUB 310
5290 VTAB 21: HTAB 1: CALL -868: INVERSE : PRINT "-->";: NORMAL : PRINT " = TO CONTINUE";: HTAB 31: PRINT "RECORD #";: VTAB 22: HTAB 1: CALL -868: INVERSE : PRINT "'P'";: NORMAL : PRINT " = TO PRINT";: HTAB 31: PRINT K1;" OF ";REC;
5300 VTAB 23: HTAB 1: CALL -868: INVERSE : PRINT "ESC";: NORMAL : PRINT " = TO QUIT";: GET Z$: PRINT Z$;: IF Z$ < >"P" AND Z$ < > CHR$(21) AND Z$ < > CHR$(27) THEN 5300
5310 IF Z$ = CHR$(21) THEN 5400
5320 IF Z$ = CHR$(27) THEN K1 = REC: GOTO 5410
5330 HOME : PRINT : PRINT "ENTER IN PRINTER SLOT #";G$;: INPUT SLOT
5340 PRINT : PRINT "TURN ON PRINTER"
5350 VTAB 23: HTAB 5: INVERSE : PRINT "PRESS ANY KEY TO CONTINUE";: NORMAL : GET Z$: PRINT Z$
5360 PRINT D$;"PR#";SLOT
5370 PRINT : PRINT "RECORD # ";K1: GOSUB 310
5380 PRINT D$;"PR#0"
5390 GOTO 5290
5400 PRINT D$;"OPEN ";FILE$;",L";RL
5410 NEXT K1
5420 PRINT D$;"CLOSE ";FILE$
5430 HOME : PRINT : PRINT "SEARCH COMPLETE": PRINT : PRINT N;" RECORDS FOUND": VTAB 23: HTAB 10: GOSUB 250: GET Z$: PRINT Z$: CLEAR : GOTO 500
6000 REM ***PRINT MAIL-LABELS***
6010 A1$ = "PRINT REPORT":B1$ = "REPORT"
6020 TEXT : HOME : GOSUB 260: HOME : GOSUB 360:RX = 0: GOSUB 280
6030 INPUT REC
6040 PRINT D$;"CLOSE";FILE$
6050 T$(NF +1) = H$ +H$ +H$ +H$ +B$: DIM TX$(2 *NF),TW(2 *NF): FOR K = 1 TO NF:TX$(K) = CHR$(13): NEXT K
6060 HOME :L = 0: PRINT : PRINT "THE FOLLOWING LINES ARE AVAILABLE FOR THE ";B1$;":": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
6070 L = L +1
6080 VTAB 23: HTAB 10: GOSUB 250: PRINT : VTAB 20: CALL -868: PRINT "ENTER FIELD # FOR ";B1$;" LINE ";L;G$;: INPUT TV$: IF L = 1 AND LEN(TV$) = 0 THEN CLEAR : GOTO 500
6090 IF LEN(TV$) = 0 THEN 6130
6100 IF TV$ = CHR$(21) OR TV$ = CHR$(32) THEN CLEAR : GOTO 500
6110 TV = INT( VAL(TV$)): IF TV <1 OR TV >NF THEN 6080
6120 TW(L) = TV: GOTO 6070
6130 HOME :LINES = L -1: PRINT : PRINT "YOUR ";B1$;" WILL CONSIST OF:": PRINT
6140 FOR K = 1 TO LINES: HTAB 10: PRINT K;". ";T$(TW(K)): NEXT K: PRINT
6150 VTAB 22: PRINT "IS THIS CORRECT (Y/N) ";G$;: GET Y$: PRINT Y$: IF Y$ = "N" THEN 6060
6160 IF Y$ = CHR$(21) OR Y$ = CHR$(32) THEN CLEAR : GOTO 500
6170 IF Y$ < >"Y" THEN 6150
6180 VTAB 23: CALL -868: PRINT "JOIN TOGETHER TWO LINES OR MORE (Y/N) ";G$;: GET Y$: PRINT Y$: IF Y$ < >"Y" THEN 6300
6210 VTAB 20: PRINT "JOIN ENTRY # ";G$;: CALL -868: INPUT LX$: IF LEN(LX$) = 0 THEN 6300
6220 REM
6230 VTAB 23: CALL -958:LX = VAL(LX$): IF LX <1 OR LX >LINES -1 THEN PRINT "INVALID!";G$;G$: GOTO 6200
6240 VTAB 21: HTAB 13: PRINT LX +1
6250 PRINT "ENTER CONJUNCTION ";: INVERSE : PRINT "(SPACE , ; : / & .)";G$;: NORMAL : CALL -868:TX$(LX) = "": REM NOTHING IN BETWEEN ""
6260 GET T1$: PRINT T1$;: IF T1$ = CHR$(13) THEN 6280
6270 TX$(LX) = TX$(LX) +T1$: GOTO 6260
6280 VTAB 23: CALL -868: PRINT T$(TW(LX));TX$(LX);T$(TW(LX +1)): FOR K = 1 TO 1000: NEXT K
6290 GOTO 6200
6300 HOME : PRINT : PRINT "THE ";B1$;" WILL LOOK LIKE THIS:": PRINT
6310 FOR K = 1 TO LINES: PRINT T$(TW(K));TX$(K);: NEXT K
6320 VTAB 22: PRINT "CORRECT (Y/N) ";G$;: GET Y$: PRINT Y$: IF Y$ = "N" THEN 6060
6330 IF Y$ < >"Y" THEN 6320
6331 SRFL = 0: HOME : PRINT : PRINT "DO YOU WANT A SEARCH IN A SPECIFIC FIELD ?": GOSUB 190: IF Y$ = "N" THEN 6340
6332 IF Y$ < >"Y" THEN 6331
6333 SRFL = 1: HOME : PRINT : PRINT "THE FOLLOWING LINES ARE AVAILABLE FOR THE SEARCH:": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
6334 VTAB 24: HTAB 5: GOSUB 250
6335 VTAB 20: HTAB 1: CALL -868: PRINT "ENTER CHOICE FOR SEARCH FIELD ";G$;: INPUT ":";SERFLD$: IF SERFLD$ = "" THEN SRFL = 0: GOTO 6340
6336 SERFLD = VAL(SERFLD$): IF SERFLD <1 OR SERFLD >NF THEN 6335
6337 VTAB 22: HTAB 1: CALL -868: PRINT "ENTER SEARCH PARAMETER ";G$;: INPUT ":";SP$:SP = LEN(SP$): IF SP >TV(SERFLD) THEN VTAB 22: CALL -868::: INVERSE : PRINT "SEARCH PARAMETER TOO LONG !";:: NORMAL : FOR II = 1 TO 750: NEXT II: GOTO 6337
6338 FOR II = 1 TO 300: NEXT II: HOME : PRINT : PRINT "SEARCH ";T$(SERFLD);" FOR ";SP$: GOSUB 190: IF Y$ = "N" THEN 6331
6339 IF Y$ < >"Y" THEN 6338
6340 HOME : PRINT : PRINT "WANT SORTED ";B1$;" (Y/N)?";G$;: GET Y1$: PRINT Y1$: IF Y1$ < >"Y" THEN 6520
6350 DIM SRT$(REC),SO(REC)
6360 HOME : PRINT : PRINT "THE FOLLOWING LINES ARE AVAILABLE FOR THE SORT FIELD:": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
6370 PRINT : PRINT "SORT ON WHICH FIELD (BY NUMBER): ";G$;: INPUT SF$:SF = VAL(SF$): IF SF <1 OR SF >NF THEN 6360
6380 PRINT : PRINT "*** SORT ON ";: INVERSE : PRINT T$(SF): NORMAL
6390 PRINT : PRINT "ASCENDING OR DESCENDING SORT (A/D):";G$;: GET S$: PRINT S$:S1 = (S$ = "A")
6400 PRINT D$;"OPEN";FILE$;",L";RL
6410 FOR K = 1 TO REC:RX = K: GOSUB 290: IF SF = 1 THEN 6430
6420 FOR L = 1 TO SF -1: INPUT Z$: NEXT L
6430 INPUT SRT$(K):SO(K) = K: NEXT K
6440 PRINT D$;"CLOSE";FILE$
6450 M = 1
6460 M = 3 *M +1: IF M <REC THEN 6460
6470 M = (M -1)/3: IF M <1 THEN 6510
6480 FOR J = M +1 TO REC:LL = J -M:SS$ = SRT$(J):S = SO(J)
6490 IF S1 = (SRT$(LL) >SS$) THEN SRT$(LL +M) = SRT$(LL):SO(LL +M) = SO(LL):LL = LL -M: IF LL >0 THEN 6490
6520 HOME : PRINT : PRINT "ENTER IN PRINTER SLOT #";G$;: INPUT SLOT
6530 PRINT D$;"PR#";SLOT
6540 PRINT D$;"PR#0"
6550 PRINT : PRINT "HOW MANY CARRIAGE RETURNS FROM END OF ONE ";B1$;" TO NEXT: ";G$;: INPUT CR
6560 HOME : PRINT : PRINT "ALIGN PAPER.": PRINT : PRINT "PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " WHEN READY.";: GET Y$: PRINT Y$
6570 PRINT D$;"OPEN";FILE$;",L";RL
6580 IF Y1$ < >"Y" THEN 6610
6590 FOR K1 = 1 TO REC:RX = SO(K1): GOTO 6690
6600 GOTO 6660
6610 HOME : VTAB 23: HTAB 10: GOSUB 250: PRINT : VTAB 12: CALL -868: PRINT "ENTER RECORD # TO START WITH: ";G$;: INPUT RX$:RX = VAL(RX$): IF LEN(RX$) = 0 THEN CLEAR : GOTO 500
6620 IF RX < = REC THEN RX = RX -1: HOME : GOTO 6640
6630 PRINT "ONLY ";REC;" RECORDS ON FILE.";G$;G$: FOR KK = 1 TO 400: NEXT KK: GOTO 6560
6640 RX = RX +1: IF RX <1 THEN RX = 1
6650 IF RX < = REC THEN 6690
6660 PRINT D$;"CLOSE";FILE$
6670 PRINT "END OF FILE!";G$;G$
6680 PRINT : PRINT "PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " WHEN READY";: GET Y$: PRINT Y$: RUN 500
6690 GOSUB 290: FOR K = 1 TO NF: INPUT P$(K): NEXT K
6692 IF SRFL = 0 THEN 6700
6694 & P$(SERFLD),SP$
6696 IF PEEK(26) = 0 THEN 6780
6700 PRINT D$;"PR#";SLOT
6710 R1 = 0
6720 FOR K = 1 TO LINES: IF LEN(P$(TW(K))) = 0 THEN 6740
6730 PRINT P$(TW(K));TX$(K);: IF LEN(P$(TW(K))) < >0 AND TX$(K) = CHR$(13) THEN R1 = R1 +1
6740 NEXT K
6750 IF CR = 0 THEN 6770
6760 FOR K = 1 TO CR -R1: PRINT : NEXT K
6770 PRINT D$;"PR#0"
6780 IF Y1$ < >"Y" THEN 6640
6790 NEXT K1: GOTO 6660
7000 REM **COMPUTE SUBTOTALS**
7010 A1$ = "COMPUTE SUBTOTALS":B1$ = "SUBTOTALS"
7020 TEXT : HOME : GOSUB 260: HOME : GOSUB 360:RX = 0: GOSUB 280
7030 INPUT REC
7040 PRINT D$;"CLOSE ";FILE$
7050 DIM SP$(NF),SERFLD(NF)
7060 HOME : PRINT : PRINT "THE FOLLOWING LINES ARE AVAILABLE FOR THE ";B1$;":": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
7070 VTAB 24: HTAB 10: GOSUB 250
7080 VTAB 20: HTAB 1: CALL -868: PRINT "ENTER # FOR FIELD TO SUBTOTAL ";G$;: INPUT ":";ST$: IF ST$ = "" THEN CLEAR : GOTO 500
7090 ST = VAL(ST$): IF ST <1 OR ST >NF THEN 7080
7100 FOR II = 1 TO 300: NEXT II:SRFL = 0
7110 HOME : PRINT : PRINT "WANT SUBTOTALS ON SPECIFIC RECORDS ?";G$;: GET Y$: PRINT Y$;: IF Y$ = "N" THEN 7260
7120 IF Y$ < >"Y" THEN 7110
7130 SRFL = 1
7140 HOME : PRINT : PRINT "THE FOLLOWING FIELDS ARE AVAILABLE FOR THE SEARCH:": PRINT : FOR K = 1 TO NF STEP 2: PRINT K;". ";T$(K); TAB( 20);K +1;". ";T$(K +1): NEXT K
7150 FOR K = 1 TO NF: VTAB 20: HTAB 1: CALL -958: VTAB 24: HTAB 10: GOSUB 250
7160 VTAB 20: HTAB 1: CALL -868: PRINT "ENTER CHOICE FOR SEARCH FIELD # ";K;G$;: INPUT ": ";SERFLD$: IF SERFLD$ = "" AND K = 1 THEN SRFL = 0: GOTO 7260
7170 IF SERFLD$ = "" THEN NP = K -1:K = NF: GOTO 7210
7180 SERFLD(K) = VAL(SERFLD$): IF SERFLD(K) <1 OR SERFLD(K) >NF THEN 7160
7200 IF SP >TV(SERFLD(K)) THEN VTAB 22: HTAB 1: CALL -868: INVERSE : PRINT "SEARCH PARAMETER TOO LONG !";: NORMAL : FOR II = 1 TO 750: NEXT II: GOTO 7190
7210 NEXT K: FOR II = 1 TO 300: NEXT II
7220 HOME : FOR K = 1 TO NP: VTAB (2 *K +6): HTAB 1: PRINT "SEARCH ";T$(SERFLD(K));" FOR ";SP$(K);: IF K <NP THEN HTAB ( PEEK(36) +2): PRINT "AND";
7230 NEXT K: PRINT : GOSUB 190
7240 IF Y$ = "N" THEN 7140
7250 IF Y$ < >"Y" THEN 7240
7260 PRINT D$;"OPEN ";FILE$;",L";RL
7270 FT = 0
7280 FOR K1 = 1 TO REC
7290 PRINT D$;"READ ";FILE$;",R";K1
7300 IF SRFL = 1 THEN 7340
7310 PRINT D$;"POSITION ";FILE$;",R";(ST -1)
7320 PRINT D$;"READ ";FILE$
7330 INPUT P$(ST): GOTO 7400
7340 FOR K = 1 TO NF: INPUT P$(K): NEXT K
7350 FL = 0
7360 FOR K = 1 TO NP
7370 & P$(SERFLD(K)),SP$(K)
7380 IF PEEK(26) = 0 THEN K = NP:FL = 1
7390 NEXT K: IF FL = 1 THEN 7410
7400 FT = FT + VAL(P$(ST))
7410 NEXT K1
7420 PRINT D$;"CLOSE ";FILE$
7430 HOME : PRINT : PRINT "THE TOTAL FOR ";T$(ST);" IS ";FT